﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Input;

namespace GMUtilitiesDotNet.Gestures
{
    public abstract class GestureBase : IGesture
    {
        #region Mouse event handlers
        public virtual bool OnMouseDown(MouseButtonEventArgs args)
        {
            return false;
        }

        public virtual bool OnMouseUp(MouseButtonEventArgs args)
        {
            return false;
        }

        public virtual bool OnMouseLeftButtonDown(MouseButtonEventArgs args)
        {
            return false;
        }

        public virtual bool OnMouseLeftButtonUp(MouseButtonEventArgs args)
        {
            return false;
        }

        public virtual bool OnMouseRightButtonDown(MouseButtonEventArgs args)
        {
            return false;
        }

        public virtual bool OnMouseRightButtonUp(MouseButtonEventArgs args)
        {
            return false;
        }

        public virtual bool OnMouseMove(MouseEventArgs args)
        {
            return false;
        }

        public virtual bool OnMouseWheel(MouseWheelEventArgs args)
        {
            return false;
        }

        public virtual bool OnMouseEnter(MouseEventArgs args)
        {
            return false;
        }

        public virtual bool OnMouseLeave(MouseEventArgs args)
        {
            return false;
        }
        #endregion

        public virtual bool KeyboardInput(KeyEventArgs args)
        {
            return false;
        }

        public virtual bool LostFocus()
        {
            return false;
        }

        public virtual void Reset()
        {
        }

        public bool Handled
        {
            get { return handled; }
            set { handled = value; }
        }

        public object CommandParam
        {
            get { return commandParam; }
            set { commandParam = value; }
        }

        private bool handled;
        private object commandParam;
    }
}
